Software applications are often constructed using an abstract state description language. Voice over Internet Protocol (IP) (or VoIP) call control applications, for example, have been realized by using a high level description language to describe the data processing and message exchange behavior of a VoIP Media Gateway Controller (MGC). In this system, an “execution engine” accepts a high level “graph language” used by the execution engine to create internal data structures that realize the VoIP MGC behaviors described in the input graph language. The combination of the execution engine and the input file that contains the graph language describing the VoIP MGC behavior results in a system that exhibits the desired MGC processing characteristics.
The description language supports an enhanced transition graph model. As a result, the computation can be best understood as a graph consisting of a set of nodes connected by arcs. Using this model, there may be many tokens that exist at a given node. The arcs represent transitions that tokens take between nodes. Tokens traverse arcs in response to events that can be derived from either timers or messages.
In many systems, especially those that implement VoIP call control, the system must perform predictably in the face of high demand, such as spikes of traffic. Typically, a call flow will be started with an event in the form of a message, generated on behalf of a user, when a user goes off-hook or completes entering a telephone number of a desired destination. The initial event will be followed by a series of message exchanges used by the specific protocol to move the call into a quiescent state.
In a conventional system under heavy or overload conditions, all messages (and therefore transitions between states) will be given an equal priority. This may result in a delay for the completion of a call setup message sequence (representing a call accepted by the system and already in progress), as requests for new service (e g, a new call) will compete for resources with calls that are already in the process of being torn down. Thus, additional resources will be expended for a given offered load, as the system will not give precedence to a call in a tear-down phase that would be returning resources to the system.
A need therefore exists for an improved state machine execution environment that prioritizes message flows. Yet another need exists for a state machine execution environment that provides overload control with message prioritization.